1 /*
2  * This file is part of gtkD.
3  *
4  * gtkD is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU Lesser General Public License
6  * as published by the Free Software Foundation; either version 3
7  * of the License, or (at your option) any later version, with
8  * some exceptions, please read the COPYING file.
9  *
10  * gtkD is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public License
16  * along with gtkD; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110, USA
18  */
19 
20 // generated automatically - do not change
21 // find conversion definition on APILookup.txt
22 // implement new conversion functionalities on the wrap.utils pakage
23 
24 
25 module gtk.CellLayoutT;
26 
27 public  import glib.ListG;
28 public  import glib.Str;
29 public  import gobject.ObjectG;
30 public  import gtk.CellArea;
31 public  import gtk.CellRenderer;
32 public  import gtk.c.functions;
33 public  import gtk.c.types;
34 
35 
36 /**
37  * An interface for packing cells
38  * 
39  * `GtkCellLayout` is an interface to be implemented by all objects which
40  * want to provide a `GtkTreeViewColumn` like API for packing cells,
41  * setting attributes and data funcs.
42  * 
43  * One of the notable features provided by implementations of
44  * `GtkCellLayout` are attributes. Attributes let you set the properties
45  * in flexible ways. They can just be set to constant values like regular
46  * properties. But they can also be mapped to a column of the underlying
47  * tree model with gtk_cell_layout_set_attributes(), which means that the value
48  * of the attribute can change from cell to cell as they are rendered by
49  * the cell renderer. Finally, it is possible to specify a function with
50  * gtk_cell_layout_set_cell_data_func() that is called to determine the
51  * value of the attribute for each cell that is rendered.
52  * 
53  * # GtkCellLayouts as GtkBuildable
54  * 
55  * Implementations of GtkCellLayout which also implement the GtkBuildable
56  * interface (`GtkCellView`, `GtkIconView`, `GtkComboBox`,
57  * `GtkEntryCompletion`, `GtkTreeViewColumn`) accept `GtkCellRenderer` objects
58  * as `<child>` elements in UI definitions. They support a custom `<attributes>`
59  * element for their children, which can contain multiple `<attribute>`
60  * elements. Each `<attribute>` element has a name attribute which specifies
61  * a property of the cell renderer; the content of the element is the
62  * attribute value.
63  * 
64  * This is an example of a UI definition fragment specifying attributes:
65  * 
66  * ```xml
67  * <object class="GtkCellView">
68  * <child>
69  * <object class="GtkCellRendererText"/>
70  * <attributes>
71  * <attribute name="text">0</attribute>
72  * </attributes>
73  * </child>
74  * </object>
75  * ```
76  * 
77  * Furthermore for implementations of `GtkCellLayout` that use a `GtkCellArea`
78  * to lay out cells (all `GtkCellLayout`s in GTK use a `GtkCellArea`)
79  * [cell properties](class.CellArea.html#cell-properties) can also be defined
80  * in the format by specifying the custom `<cell-packing>` attribute which can
81  * contain multiple `<property>` elements.
82  * 
83  * Here is a UI definition fragment specifying cell properties:
84  * 
85  * ```xml
86  * <object class="GtkTreeViewColumn">
87  * <child>
88  * <object class="GtkCellRendererText"/>
89  * <cell-packing>
90  * <property name="align">True</property>
91  * <property name="expand">False</property>
92  * </cell-packing>
93  * </child>
94  * </object>
95  * ```
96  * 
97  * # Subclassing GtkCellLayout implementations
98  * 
99  * When subclassing a widget that implements `GtkCellLayout` like
100  * `GtkIconView` or `GtkComboBox`, there are some considerations related
101  * to the fact that these widgets internally use a `GtkCellArea`.
102  * The cell area is exposed as a construct-only property by these
103  * widgets. This means that it is possible to e.g. do
104  * 
105  * ```c
106  * GtkWIdget *combo =
107  * g_object_new (GTK_TYPE_COMBO_BOX, "cell-area", my_cell_area, NULL);
108  * ```
109  * 
110  * to use a custom cell area with a combo box. But construct properties
111  * are only initialized after instance `init()`
112  * functions have run, which means that using functions which rely on
113  * the existence of the cell area in your subclass `init()` function will
114  * cause the default cell area to be instantiated. In this case, a provided
115  * construct property value will be ignored (with a warning, to alert
116  * you to the problem).
117  * 
118  * ```c
119  * static void
120  * my_combo_box_init (MyComboBox *b)
121  * {
122  * GtkCellRenderer *cell;
123  * 
124  * cell = gtk_cell_renderer_pixbuf_new ();
125  * 
126  * // The following call causes the default cell area for combo boxes,
127  * // a GtkCellAreaBox, to be instantiated
128  * gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (b), cell, FALSE);
129  * ...
130  * }
131  * 
132  * GtkWidget *
133  * my_combo_box_new (GtkCellArea *area)
134  * {
135  * // This call is going to cause a warning about area being ignored
136  * return g_object_new (MY_TYPE_COMBO_BOX, "cell-area", area, NULL);
137  * }
138  * ```
139  * 
140  * If supporting alternative cell areas with your derived widget is
141  * not important, then this does not have to concern you. If you want
142  * to support alternative cell areas, you can do so by moving the
143  * problematic calls out of `init()` and into a `constructor()`
144  * for your class.
145  */
146 public template CellLayoutT(TStruct)
147 {
148 	/** Get the main Gtk struct */
149 	public GtkCellLayout* getCellLayoutStruct(bool transferOwnership = false)
150 	{
151 		if (transferOwnership)
152 			ownedRef = false;
153 		return cast(GtkCellLayout*)getStruct();
154 	}
155 
156 
157 	/**
158 	 * Adds an attribute mapping to the list in @cell_layout.
159 	 *
160 	 * The @column is the column of the model to get a value from, and the
161 	 * @attribute is the property on @cell to be set from that value. So for
162 	 * example if column 2 of the model contains strings, you could have the
163 	 * “text” attribute of a `GtkCellRendererText` get its values from column 2.
164 	 * In this context "attribute" and "property" are used interchangeably.
165 	 *
166 	 * Params:
167 	 *     cell = a `GtkCellRenderer`
168 	 *     attribute = a property on the renderer
169 	 *     column = the column position on the model to get the attribute from
170 	 */
171 	public void addAttribute(CellRenderer cell, string attribute, int column)
172 	{
173 		gtk_cell_layout_add_attribute(getCellLayoutStruct(), (cell is null) ? null : cell.getCellRendererStruct(), Str.toStringz(attribute), column);
174 	}
175 
176 	/**
177 	 * Unsets all the mappings on all renderers on @cell_layout and
178 	 * removes all renderers from @cell_layout.
179 	 */
180 	public void clear()
181 	{
182 		gtk_cell_layout_clear(getCellLayoutStruct());
183 	}
184 
185 	/**
186 	 * Clears all existing attributes previously set with
187 	 * gtk_cell_layout_set_attributes().
188 	 *
189 	 * Params:
190 	 *     cell = a `GtkCellRenderer` to clear the attribute mapping on
191 	 */
192 	public void clearAttributes(CellRenderer cell)
193 	{
194 		gtk_cell_layout_clear_attributes(getCellLayoutStruct(), (cell is null) ? null : cell.getCellRendererStruct());
195 	}
196 
197 	/**
198 	 * Returns the underlying `GtkCellArea` which might be @cell_layout
199 	 * if called on a `GtkCellArea` or might be %NULL if no `GtkCellArea`
200 	 * is used by @cell_layout.
201 	 *
202 	 * Returns: the cell area used by @cell_layout
203 	 */
204 	public CellArea getArea()
205 	{
206 		auto __p = gtk_cell_layout_get_area(getCellLayoutStruct());
207 
208 		if(__p is null)
209 		{
210 			return null;
211 		}
212 
213 		return ObjectG.getDObject!(CellArea)(cast(GtkCellArea*) __p);
214 	}
215 
216 	/**
217 	 * Returns the cell renderers which have been added to @cell_layout.
218 	 *
219 	 * Returns: a list of cell renderers. The list, but not the renderers has
220 	 *     been newly allocated and should be freed with g_list_free()
221 	 *     when no longer needed.
222 	 */
223 	public ListG getCells()
224 	{
225 		auto __p = gtk_cell_layout_get_cells(getCellLayoutStruct());
226 
227 		if(__p is null)
228 		{
229 			return null;
230 		}
231 
232 		return new ListG(cast(GList*) __p);
233 	}
234 
235 	/**
236 	 * Adds the @cell to the end of @cell_layout. If @expand is %FALSE, then the
237 	 * @cell is allocated no more space than it needs. Any unused space is
238 	 * divided evenly between cells for which @expand is %TRUE.
239 	 *
240 	 * Note that reusing the same cell renderer is not supported.
241 	 *
242 	 * Params:
243 	 *     cell = a `GtkCellRenderer`
244 	 *     expand = %TRUE if @cell is to be given extra space allocated to @cell_layout
245 	 */
246 	public void packEnd(CellRenderer cell, bool expand)
247 	{
248 		gtk_cell_layout_pack_end(getCellLayoutStruct(), (cell is null) ? null : cell.getCellRendererStruct(), expand);
249 	}
250 
251 	/**
252 	 * Packs the @cell into the beginning of @cell_layout. If @expand is %FALSE,
253 	 * then the @cell is allocated no more space than it needs. Any unused space
254 	 * is divided evenly between cells for which @expand is %TRUE.
255 	 *
256 	 * Note that reusing the same cell renderer is not supported.
257 	 *
258 	 * Params:
259 	 *     cell = a `GtkCellRenderer`
260 	 *     expand = %TRUE if @cell is to be given extra space allocated to @cell_layout
261 	 */
262 	public void packStart(CellRenderer cell, bool expand)
263 	{
264 		gtk_cell_layout_pack_start(getCellLayoutStruct(), (cell is null) ? null : cell.getCellRendererStruct(), expand);
265 	}
266 
267 	/**
268 	 * Re-inserts @cell at @position.
269 	 *
270 	 * Note that @cell has already to be packed into @cell_layout
271 	 * for this to function properly.
272 	 *
273 	 * Params:
274 	 *     cell = a `GtkCellRenderer` to reorder
275 	 *     position = new position to insert @cell at
276 	 */
277 	public void reorder(CellRenderer cell, int position)
278 	{
279 		gtk_cell_layout_reorder(getCellLayoutStruct(), (cell is null) ? null : cell.getCellRendererStruct(), position);
280 	}
281 
282 	/**
283 	 * Sets the `GtkCellLayout`DataFunc to use for @cell_layout.
284 	 *
285 	 * This function is used instead of the standard attributes mapping
286 	 * for setting the column value, and should set the value of @cell_layout’s
287 	 * cell renderer(s) as appropriate.
288 	 *
289 	 * @func may be %NULL to remove a previously set function.
290 	 *
291 	 * Params:
292 	 *     cell = a `GtkCellRenderer`
293 	 *     func = the `GtkCellLayout`DataFunc to use
294 	 *     funcData = user data for @func
295 	 *     destroy = destroy notify for @func_data
296 	 */
297 	public void setCellDataFunc(CellRenderer cell, GtkCellLayoutDataFunc func, void* funcData, GDestroyNotify destroy)
298 	{
299 		gtk_cell_layout_set_cell_data_func(getCellLayoutStruct(), (cell is null) ? null : cell.getCellRendererStruct(), func, funcData, destroy);
300 	}
301 }